#!/usr/bin/perl

@mapa = ("1", "2", "3", "4", "5", "6", "7", "8", "9");
$wygrana = 0;

while (true) {
    rysujMape();
	print ("Ruch gracza X.\n");
    $pos = postaw();
    $mapa[$pos - 1] = "X";
    $wygrana = czyKoniec();
    if ($wygrana eq 'X' || $wygrana eq 'O' || $wygrana eq '-') {last};
    rysujMape();
	print ("Ruch gracza O.\n");
	$pos = postaw();
    $mapa[$pos - 1] = "O";
    $wygrana = czyKoniec();
    if ($wygrana eq 'X' || $wygrana eq 'O' || $wygrana eq '-') {last};
}
rysujMape();
if ($wygrana eq 'X') {print ("gracz X wygral \n")};
if ($wygrana eq 'O') {print ("gracz O wygral \n")};
if ($wygrana eq '-') {print ("remis \n")};

sub rysujMape {
    print ("\n|$mapa[0]|$mapa[1]|$mapa[2]|\n");
    print ("|$mapa[3]|$mapa[4]|$mapa[5]|\n");
    print ("|$mapa[6]|$mapa[7]|$mapa[8]|\n\n");
}

sub postaw {
    $pole = 0;
    while ($pole == 0) {
        print ("podaj pole od 1 do 9\n");
        $i = <STDIN>;
        chomp($i);
        if ($i > 0 && $i < 10) 
		{
            if ( $mapa[$i-1] eq "X" || $mapa[$i-1] eq "O") {
                print ("pole zajete\n");
                rysujMape();
            } else {
                $pole = $i;
            }
        } else {
            print ("musi byc cyfra od 1 do 9\n");
        }
    }
    return $pole;
}

sub czyKoniec {
	@names = qw(O X);
	foreach $n(@names){
		for($i = 0; $i < 9; $i+=3){
			if ($mapa[$i] eq $n && $mapa[$i+1] eq $n && $mapa[$i+2] eq $n){return $n};
		}
		for($i = 0; $i < 3; $i++){
			if ($mapa[$i] eq $n && $mapa[$i+3] eq $n && $mapa[$i+6] eq $n){return $n};
		}
		if ($mapa[0] eq $n && $mapa[4] eq $n && $mapa[8] eq $n){return $n};
		if ($mapa[2] eq $n && $mapa[4] eq $n && $mapa[6] eq $n){return $n};
	}
	$count =0;
	foreach $b(@mapa){
		if ($b eq 'X' || $b eq 'O') {$count++};
	}
	if($count==9){return '-'};
} 